/* 
 * File:   main.cpp
 * Author: Maximiliano Monzon (82341)
 *
 * Created on October 19, 2012, 9:30 PM
 */

#include <cstdlib>
#include <sstream>
#include <fstream>
#include "server_Servidor.h"
#include "common_Excepcion.h"
#include "common_ServerConfFileManager.h"

using namespace std;
using namespace TP;
using namespace TP::Comunicacion;

#define PATH_CONF_FILE "config.xml"

int main(int argc, char** argv) {
    
    Servidor* servidor = NULL;  
    
    try
    {
        // Si no existe el archivo de configuracion, no se puede iniciar la aplicacion.
        ifstream confFile(PATH_CONF_FILE);

        if (!confFile) {
            cout << "No se pudo encontrar el archivo config.xml" << endl;
            cout << "No se pudo iniciar la aplicacion." << endl;
            cout << "Defina una configuracion valida para el servidor, utilizando" <<
            cout << " el editor." << endl;
            return 1;
        }

        confFile.close();

        ServerConfFileManager confFileManager(string(PATH_CONF_FILE));

        string puerto = confFileManager.GetPuertoServidor();
        string pathAu = confFileManager.GetPathAU();

        servidor = new Servidor(puerto, pathAu);
        servidor->Iniciar();
        
        // Atiendo a los eventos provenientes de entrada estandar.
        //
        string comando = "";

        while (std::getline(cin, comando, '\n'))
        {
            if ("q" == comando)
                break;
            else
                cout << endl << "Comando invalido..." << endl << endl << "Salir (q): ";;
        }
    }
    catch (Excepcion& pEx)
    {
        cerr << pEx.what() << std::endl;
    } 

    // Libero los recursos ocupado por el servidor.
    //
    if (servidor != NULL)
    {
        try
        {
            servidor->Finalizar();
        }
        catch (Excepcion& ex)
        {
            cerr << ex.what() << endl;
        }
        delete servidor;
    }
    return EXIT_SUCCESS;
}

